#ifndef __RSA_IMPL_H
#define __RSA_IMPL_H

#ifdef __cplusplus
extern "C" {
#endif

#include <stdint.h>

/* RSAParameters定义 */
#define RSA_IMPL_KEY_SIZE      128  // 1024位Key（128字节）
#define RSA_IMPL_BLOCK_SIZE    128  // 块大小（128字节）

/* RSAKey结构 */
typedef struct {
    uint32_t n[32];      // 模数 N (1024位)
    uint32_t e;          // 公钥指数 E (通常Yes65537)
    uint32_t d[32];      // 私钥指数 D (1024位)
    uint8_t key_loaded;  // KeyYesNo已Load
} RSA_Impl_Context;

/* Function声明 */

/**
 * @brief InitializeRSA上下文
 * @param ctx RSA上下文指针
 */
void RSA_Impl_Init(RSA_Impl_Context* ctx);

/**
 * @brief LoadRSAKey
 * @param ctx RSA上下文指针
 * @param key_data KeyData（IncludeN, E, D）
 * @param key_len Key长度
 */
void RSA_Impl_LoadKey(RSA_Impl_Context* ctx, const uint8_t* key_data, uint32_t key_len);

/**
 * @brief RSA公钥加密（模幂运算：C = M^E mod N）
 * @param ctx RSA上下文指针
 * @param input Plaintext（128字节）
 * @param output Ciphertext（128字节）
 */
void RSA_Impl_Encrypt(const RSA_Impl_Context* ctx, const uint8_t* input, uint8_t* output);

/**
 * @brief RSA私钥解密（模幂运算：M = C^D mod N）
 * @param ctx RSA上下文指针
 * @param input Ciphertext（128字节）
 * @param output Plaintext（128字节）
 */
void RSA_Impl_Decrypt(const RSA_Impl_Context* ctx, const uint8_t* input, uint8_t* output);

#ifdef __cplusplus
}
#endif

#endif /* __RSA_IMPL_H */
